1. 自定义监控项
如何获取系统中我们想监控的对象的值,获取之后又是如何传递给zabbix-server
1. 监控系统中的对象
[root@web01 ~]# w | awk 'NR==1{print $(NF-6)}'
2
2. 客户端如何添加这个监控项
#监控项添加的文件(模板示例)
Include=/etc/zabbix/zabbix_agentd.d/*.conf
### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#切换到脚本目录,然后进行编写UserParameter=<key>,<shell command>
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/qls.conf
UserParameter=login_number,w | awk 'NR==1{print $(NF-6)}'
3. 编写了配置文件,需要进行重启操作
[root@web01 ~]# systemctl restart zabbix-agent.service
4. 测试监控项的值,检查
[root@web01 ~]# zabbix_agentd -t login_number
login_number [t|2]
[root@web01 ~]# zabbix_agentd -p | grep login_number
login_number [t|2]
d Number with a decimal part.
m Not supported. This could be caused by querying an item that only works in the active mode like a log monitoring
item or an item that requires multiple collected values. Permission issues or incorrect user parameters could also
result in the not supported state.
s Text. Maximum length not limited.
t Text. Same as s.
u Unsigned integer.
5. 如何让zabbix-server也获取到这个值的
#首先要安装对应版本的get命令
[root@zabbix-server ~]# yum install -y https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.18-1.el7.x86_64.rpm
#然后使用get命令获取
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -p10050 -k login_number
2
-s 指定主机
-p 端口号
-k 指定key
6. web配置如下



2. 自定义触发器
当用户登录的数量超过3个则报警
{web01:login_number.last()}>3
配置如下







3. 自定义报警(邮件)
名称:Action-Email
默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
web页面配置如下











4. 自定义报警(微信)
AgentId
1000002
Secret
L7Ab6xf0u_4mlarFIyuorwSwtvWGwervBGg3x1QC99E
[root@zabbix-server ~]# yum install -y python-pip
[root@zabbix-server ~]#
[root@zabbix-server ~]# pip install requests
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server /usr/lib/zabbix/alertscripts]# ll
total 0
[root@zabbix-server /usr/lib/zabbix/alertscripts]# vim weixin.py
[root@zabbix-server /usr/lib/zabbix/alertscripts]# cat weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: qls
#date: 2019
#comment: zabbix接入微信报警脚本
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='wwb68507a95090e011' ##更改
appsecret='L7Ab6xf0u_4mlarFIyuorwSwtvWGwervBGg3x1QC99E' ##更改
agentid=1000002 ##更改
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
[root@zabbix-server /usr/lib/zabbix/alertscripts]# chmod +x weixin.py
[root@zabbix-server /usr/lib/zabbix/alertscripts]# ./weixin.py QiuZengJia test hello
[root@zabbix-server /usr/lib/zabbix/alertscripts]# rm -f /tmp/weixin.log
{ALERT.SENDTO} #发送的⽤户
{ALERT.SUBJECT} #发送的主题
{ALERT.MESSAGE} #发送的内容
配置如下









5. 自定义监控项深入
1. 监控tcp的22端口是否处于启动状态
net.tcp.listen[port] 检查 TCP 端口 是否处于侦听状态。返回 0 - 未侦听;1 - 正在侦听
#强制刷新
[root@zabbix-server ~]# zabbix_server -R config_cache_reload
2. 监控TCP的11种状态
[root@web01 ~]# netstat -ant | grep -c TIME_WAIT
38
[root@web01 /etc/zabbix/zabbix_agentd.d]# cat qls.conf
UserParameter=login_number,w | awk 'NR==1{print $(NF-6)}'
UserParameter=tcp_state[*],netstat -ant |grep -c $1
[root@web01 /etc/zabbix/zabbix_agentd.d]# systemctl restart zabbix-agent.service
#服务端进行取值
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k tcp_state[TIME_WAIT]
32
配置如下




6. Zabbix自定义配置阈值深入
监控内存百分比(取出内存的可用大小 / 总内存大小 = 实际可用的百分比)
1. 自定义监控内存可用百分比
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/oldboy.conf
UserParameter=Mem_pre,free -m|awk '/^Mem/{print $NF*100/$2}'
[root@web01 ~]# systemctl restart zabbix-agent
2. 在ZabbixServer验证监控项是否可用
[root@ZabbixServer ~]# zabbix_get -s 172.16.1.7 -k 'Mem_pre'
72.1766
3. Zabbix-Web页面添加监控项


4. 自定义单条件触发器,设置内存低于 30% 进行报警
点击对应主机->创建触发器

填写表达式
问题表达式: {web01-172.16.1.7:Mem_pre.last()}<30
恢复表达式: {web01-172.16.1.7:Mem_pre.last()}>30

使用dd if=/dev/zero of=/dev/null bs=500M count=1024压低内存
[root@web01 zabbix_agentd.d]# dd if=/dev/zero of=/dev/null bs=500M count=1024


5. 生产建议:内存低于10%以及swap使用大于5%,再进行报警(会更精准)
增加swap的监控
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/oldboy.conf
UserParameter=Swap_pre,free -m|awk '/^Swap/{print $3*100/$2}'
[root@web01 ~]# systemctl restart zabbix-agent
在ZabbixServer使用zabbix_get命令测试
[root@ZabbixServer ~]# zabbix_get -s 172.16.1.7 -k 'Swap_pre'
0
在ZabbixWeb创建自定义监控项

基于之前建立的触发器进行修改,修改为多条规则同时满足才触发,如下: {Web01-172.16.1.7:Mempre.last()}<30 and {Web01-172.16.1.7:Swappre.last()}>5

使用dd命令消耗客户端内存(只满足内存低于30%,所以不会进行报警)
[root@web01 zabbix_agentd.d]# dd if=/dev/zero of=/dev/null bs=500M count=1024

使用dd命令消耗客户端内存(满足内存低于30%,并且swap使用率超过5%)
[root@web01 zabbix_agentd.d]# dd if=/dev/zero of=/dev/null bs=800M count=1024

6. 常用的触发器表达式,常用的函数,触发器表达式参考url
#常用的触发器
and #并且
or #或者
last() #比对最新的值
avg() #平均值
diff() #比对上一次文件的内容
nodata() #收不到数据进行报警nodata(5m)
(5m) #表示最近5分钟得到值
(#5) #表示最近5次得到的值
7. Zabbix自定义监控图形
1. 查看图形界面的时候会出现乱码的情况,需要修改图形界面的字符集。
#linux系统上面修改
[root@zabbix_server ~]# cd /usr/share/zabbix/assets/fonts/
#上传本地的字符集到此目录下。本地字符集在c盘/Windows/Fonts目录下,选择一个上传到服务器中
[root@zabbix_server /usr/share/zabbix/assets/fonts]# rz
[root@zabbix_server /usr/share/zabbix/assets/fonts]# ll
total 11100
lrwxrwxrwx 1 root root 33 2019-12-17 16:29 graphfont.ttf -> /etc/alternatives/zabbix-web-font
-rw-r--r-- 1 root root 11362788 2017-12-13 10:39 STFANGSO.TTF
[root@zabbix_server /usr/share/zabbix/assets/fonts]# mv graphfont.ttf graphfont.ttf.bak
[root@zabbix_server /usr/share/zabbix/assets/fonts]# ll
total 11100
lrwxrwxrwx 1 root root 33 2019-12-17 16:29 graphfont.ttf.bak -> /etc/alternatives/zabbix-web-font
-rw-r--r-- 1 root root 11362788 2017-12-13 10:39 STFANGSO.TTF
[root@zabbix_server /usr/share/zabbix/assets/fonts]# mv STFANGSO.TTF graphfont.ttf
#刷新浏览器页面

2. 介绍监控的顺序->应用级->监控项->基于监控项创建触发器->基于监控项创建图形

3. 基于监控项进行绘图


4. 将多张图形整合为⼀张图形, 简称聚合图形

5. 多张聚合图形可以整合为幻灯片


8. 自定义图形树
1.安装graphtree
[root@zabbixserver dejavu]# cd /usr/share/zabbix
[root@zabbixserver zabbix]# wget https://raw.githubusercontent.com/OneOaaS/graphtrees/master/graphtree3.0.4.patch
2.导⼊补丁包
[root@zabbixserver zabbix]# yum install -y patch
[root@zabbixserver zabbix]# patch -Np0 <graphtree3.0.4.patch
[root@zabbixserver zabbix]# chown -R apache.apache oneoaas
3.修改Apache配置⽂件
[root@zabbixserver zabbix]# vim /etc/httpd/conf.d/zabbix.conf
Alias /oneoaas /usr/share/zabbix/oneoaas #添加
4.重启httpd服务
[root@zabbixserver zabbix]# systemctl restart httpd
效果图

9. Zabbix自定义模板
1. 模板是支持导入与导出(模板里面的监控项是有脚本支撑,所以脚本需一起打包)
2. .conf为结尾的配置文件,用来定义监控项,调用脚本或命令。
3. 如果希望将之前定义的监控项做成模板,找到监控项->全选->复制
4. 自定义使用模板(让监控项可以重复使用)


1.客户端agent必须要定义监控项,监控项取值需要使用到脚本文件或系统命令
2.服务端导入模板
3.创建监控主机,链接新导入模板,如果是已存在的监控主机,增加我们刚导入的模板